<%# locals: (name: nil, id: name, classes: nil, label: nil, options: {}, selected: nil, placeholder: nil, error: nil, description_html: nil, attributes: {}) %>
<% selected = typecast_body_params.str(name) || selected if name
error ||= flash.dig("errors", name) %>

<div class="space-y-2 text-gray-900">
  <% if label %>
    <label for="<%= name %>" class="text-sm font-medium leading-6"><%= label %></label>
  <% end %>
  <select
    id="<%= id %>"
    name="<%= name %>"
    class="<%= classes %> block w-full rounded-md border-0 py-1.5 pl-3 pr-10 shadow-sm ring-1 ring-inset focus:ring-2 focus:ring-inset text-sm sm:leading-6 <%= error ? "text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500" : "text-gray-900 ring-gray-300 placeholder:text-gray-400 focus:ring-orange-600"%>"
    <%== html_attrs(attributes) %>
  >
    <% if placeholder %>
      <option class="always-visible" value>
        <%= placeholder %>
      </option>
    <% end %>
    <% options = {nil => options} unless options.is_a?(Hash) %>
    <% options.each do |group_name, opts| %>
      <% next if opts.empty? %>
      <% if group_name %>
        <% opt_group_attributes = group_name.is_a?(Hash) ? group_name : {"label" => group_name}  %>
        <optgroup <%== html_attrs(opt_group_attributes) %>>
      <% end %>
      <% opts.each do |opt_val, opt_text, opt_classes, opt_attrs| %>
        <option
          value="<%= opt_val %>"
          class="<%= opt_classes %>"
          <%= (opt_val == selected) ? "selected" : "" %>
          <%== html_attrs(opt_attrs || {}) %>
        >
          <%= opt_text %>
        </option>
      <% end %>
      <% if group_name %>
        </optgroup>
      <% end %>
    <% end %>
  </select>
  <% if error %>
    <p class="text-sm text-red-600 leading-6" id="<%= name %>-error"><%= error %></p>
  <% end %>
  <%== description_html %>
</div>
